Pinvon's Blog

所见, 所闻, 所思, 所想

增加节点到现有网络

启动 first-network

./byfn.sh -m generate
./byfn.sh -m up -s couchdb -t 10000000

启动成功后, 可能在浏览器中输入 http://localhost:5984/_utils/#database/mychannel_mycc/_all_docs 查看相关信息.

关于 couch 的配置信息, 在 docker-compose-couch.yaml 文件中.

cryptogen

cryptogen 工具可以自动生成一个 Peer 所需要的加密材料.

cryptogen extend 命令可以扩展现有的网络.

cryptogen extend 命令需要一个 crypto-config.yaml 作为其参数. 我们可以打开该文件, 修改其中一个组织, 将组织中的节点新增一个. 如图, 我们将 count 由 2 改成了 3. 79.png

保存该文件, 使用命令生成新 Peer 所需的加密材料:

../bin/cryptogen extend --config=./crypto-config.yaml

此时, 在 crypto-config/peerOrganizations/org2.example.com/peers 目录下, 可以看到新 Peer 的配置文件在这里, 即: peer2.org2.example.com

如果该文件夹, 则需要修改一下权限:

sudo chmod 755 -R ./crypto-config/peerOrganizations/org2.example.com/peers/

编写 docker-compose 文件

docker-compose-new-peer.yaml:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

networks:
  byfn:

services:
  couchdb4:
    container_name: couchdb4
    image: hyperledger/fabric-couchdb
    # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
    # for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
    # for example map it to utilize Fauxton User Interface in dev environments.
    ports:
      - "9984:5984"
    networks:
      - byfn

  peer2.org2.example.com:
    container_name: peer2.org2.example.com
    extends:
      file: base/peer-base.yaml
      service: peer-base
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb4:5984
      # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
      # provide the credentials for ledger to connect to CouchDB.  The username and password must
      # match the username and password set for the associated CouchDB.
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
      - CORE_PEER_ID=peer2.org2.example.com
      - CORE_PEER_ADDRESS=peer2.org2.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2.org2.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
      - CORE_PEER_LOCALMSPID=Org2MSP
    volumes:
      - /var/run/:/host/var/run/
      - ./crypto-config/peerOrganizations/org2.example.com/peers/peer2.org2.example.com/msp:/etc/hyperledger/fabric/msp
      - ./crypto-config/peerOrganizations/org2.example.com/peers/peer2.org2.example.com/tls:/etc/hyperledger/fabric/tls
    ports:
      - 11051:7051
      - 11053:7053    
    depends_on:
      - couchdb4
    networks:
      - byfn

启动容器:

docker-compose -f docker-compose-new-peer.yaml up -d

docker ps
# 可以看到 peer2 和 couchdb4 已经启动.

80.png

可以通过浏览器访问 http://localhost:9984/_utils/#database/mychannel_mycc/_all_docs 查看数据. 但是由于目前 Peer2 还未加入 mychannel, 因此没有数据.

将新 Peer 加入 mychannel

docker exec -it cli bash

# 设置环境变量
export CHANNEL_NAME=mychannel
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer2.org2.example.com:7051

加入 mychannel:

peer channel join -b mychannel.block

此时再访问 http://localhost:9984/_utils/#database/mychannel_mycc/_all_docs, 会发现已经有了数据, 说明区块已经同步到了新节点上.

Comments

使用 Disqus 评论
comments powered by Disqus